package org.huangrui.spark.scala.sql

import org.apache.spark.sql.SparkSession

/**
 * @Author hr
 * @Create 2024-10-20 18:05 
 */
object SparkSQL03_SQL_UDF {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("SparkSQL03_SQL_UDF").master("local[2]").getOrCreate()
    spark.read.json("data/user.json").createOrReplaceTempView("user")

    // TODO 如果想要自定义的方法能够在SQL中使用，那么必须在Spark中进行声明和注册
    //      register方法需要传递3个参数
    //           第一个参数表示SQL中使用的方法名
    //           第二个参数表示逻辑 : IN => OUT
    //           第三个参数表示返回的数据类型 : DataType类型数据，需要使用scala语法操作，需要特殊的使用方式。
    //                 scala Object => Java
    //                 StringType$.MODULE$ => case object StringType
    //                 DataTypes.StringType
    spark.udf.register("prefixName", (name: String) => "Hi:" + name)
    spark.sql("select prefixName(name) from user").show()

    spark.stop()
  }
}
